;
;         :)
;
; 7       on/off (      7  
;                                                          )
;
;
.include "tn2313def.inc"
.def Temp=R16
.def Schetchik=r17
.def OutP=R18
.def Massive=r19
.def AdressMassive=r29
.def temp1=r30


.dseg
Status       :   .byte 8
StatusUpDown :   .byte 8
Speed        :   .byte 1 

.cseg
.org 0

              rjmp RESET     ; Reset Handler
              rjmp EXT_INT0  ; IRQ0 Handler
              rjmp EXT_INT1  ; IRQ1 Handler
              rjmp TIM_CAPT1 ; Timer1 Capture Handler
              rjmp TIM_COMP1 ; Timer1 Compare Handler
              rjmp TIM_OVF1  ; Timer1 Overflow Handler
              rjmp TIM_OVF0  ; Timer0 Overflow Handler
              rjmp UART_RXC  ; UART RX Complete Handler
              rjmp UART_DRE  ; UDR Empty Handler
              rjmp UART_TXC  ; UART TX Complete Handler
              rjmp ANA_COMP  ; Analog Comparator Handler



EXT_INT0  :   ret
EXT_INT1  :   ret
TIM_CAPT1 :   ret
TIM_OVF0  :   ret
TIM_OVF1  :   ret
UART_RXC  :   ret
UART_DRE  :   ret
UART_TXC  :   ret
ANA_COMP  :   ret
;TIM_COMP1:   ret



reset:       
             ldi      Temp,RamEnd       ;  
             out      SPL,Temp          ;
                                         
             ldi      temp,0b01000000   ; Timer1 Compare Handler
             out      TIMSK,temp        ;

             ldi      temp,0b00000010   ; /8  
             out      TCCR1B,temp       ;

             

             ldi      temp,0x0          ; 
             out      OCR1AH,temp       ;  
             ldi      temp,0x3          ; 
             out      OCR1AL,temp       ;

             ldi      Temp,0b01111111   ; D  
             out      ddrd,Temp         ;
             out      portd,temp 
                           
             ldi      Temp,0b11111111   ; B      
             out      ddrb,Temp         ;
                        
                                        
             ldi      massive,0b00000000             
             
                        
             ldi      AdressMassive,0
             
             ldi      temp,0x02
             out      EEAR,temp		
	     sbi      EECR,EERE		
	     in       temp,EEDR
             mov      r27,temp 



             ldi      temp,0x00
             out      EEAR,temp		
	     sbi      EECR,EERE		
	     in       temp,EEDR
             sts      speed,temp 

             ldi      temp,0x01
             out      EEAR,temp		
	     sbi      EECR,EERE		
	     in       temp,EEDR
             mov      r28,temp  
             
             sei
 
;------------ ---------------;
;------------ ----------------;
IndicCycle:  rjmp     IndicCycle





;-----  ----------;
TIM_COMP1:

             ldi      temp,0       
             out      TCNT1H,temp
             out      TCNT1L,temp

;---------  0  254----------;             
             lds      temp,Speed      
             inc      Schetchik            
             cp       Schetchik,temp
             breq     Key1
             rjmp     go_obrabotka              


;------------- -------------;
Key1:

             Sbic     pind,pind5
             rjmp     key2
             rjmp     obr_key1
         
key2:
                 
             Sbic     pind,pind4
             rjmp     key3
             rjmp     obr_key2

key3:   
             Sbic     pind,pind3
             rjmp     key4
             rjmp     obr_key3

key4:   
             Sbic     pind,pind2
             rjmp     program
             rjmp     obr_key4


obr_key1:
             sbic     pind,pind5
             rjmp     ff
             rjmp     obr_key1
ff:         
               
             lds      temp,speed
             cpi      temp,255
             breq     program 
             ldi      temp1,17
             ADD      temp,temp1
             sts      speed,temp 
             rjmp     save

obr_key2:
             sbic     pind,pind4
             rjmp     ff1
             rjmp     obr_key2
ff1:         
             lds      temp,speed
             cpi      temp,68
             breq     Program
             SUBI     temp,17
             sts      speed,temp 
             rjmp     save
obr_key3:
             sbic     pind,pind3
             rjmp     ff2
             rjmp     obr_key3
ff2:         
             inc      r28
             cpi      r28,7
             brne     savep
             ldi      r28,0
             rjmp     savep
obr_key4:
             sbic     pind,pind2
             rjmp     ff3
             rjmp     obr_key4               
ff3:
             inc      r27
             cpi      r27,2
             brne     saveON
             ldi      r27,0
             rjmp     saveON

;------  ------;

program: rjmp program1

SAVE:
             lds      temp1,speed
             sbic     EECR,EEWE		
  	     rjmp     save			
	     ldi      temp,0x00
	     out      EEDR,temp1		
	     out      EEAR,temp		
             cli				
	     sbi      EECR,EEMWE		
             sbi      EECR,EEWE		
	     sei				
             rjmp     resit
SAVEP:
 
             mov      temp1,r28
             sbic     EECR,EEWE		
  	     rjmp     savep			
	     ldi      temp,0x01
	     out      EEDR,temp1		
	     out      EEAR,temp		
             cli				
	     sbi      EECR,EEMWE		
             sbi      EECR,EEWE		
	     sei


             
             
             rjmp     resit			
SAVEON:
              
             mov      temp1,r27
             sbic     EECR,EEWE		
  	     rjmp     saveon			
	     ldi      temp,0x02
	     out      EEDR,temp1		
	     out      EEAR,temp		
             cli				
	     sbi      EECR,EEMWE		
             sbi      EECR,EEWE		
	     sei
             
             rjmp     resit	


resit:
             ldi      r18,0b00000000    
             ldi      AdressMassive,0
             ldi      r20,0            
             ldi      r21,1
             ldi      r22,1
             ldi      r23,1
             ldi      massive,0b00000000
             ldi      Schetchik,0
             ldi      temp,1          
             sts      status,temp      
             sts      status+1,temp   
             sts      status+2,temp 
             ldi      temp,0b00000000
             out      portb,temp 


Program1:
             
;----------------------------------------------------
             lds      temp,Speed
             inc      r20
             cp       r20,temp
             brne     init
             ldi      r20,0 
;----------------------------------------------------
;             andi     r28,0b00000111
             cpi      r28,0
             breq     Pr0             
             cpi      r28,1
             breq     Pr1              
             cpi      r28,2
             breq     Pr2 
             cpi      r28,3
             breq     Pr3 
             cpi      r28,4
             breq     Pr4
             cpi      r28,5
             breq     Pr5
             cpi      r28,6
             breq     Pr6
             cpi      r28,7
             breq     Pr7


Pr0:
             ldi      ZH,High(Array0*2)  
             ldi      ZL,Low(Array0*2)
             rjmp     ReadArray
Pr1:
             ldi      ZH,High(Array1*2)  
             ldi      ZL,Low(Array1*2)           
             rjmp     ReadArray
Pr2:
             ldi      ZH,High(Array2*2)  
             ldi      ZL,Low(Array2*2)           
             rjmp     ReadArray
Pr3:
             ldi      ZH,High(Array3*2)  
             ldi      ZL,Low(Array3*2)           
             rjmp     ReadArray
Pr4:
             
             ldi      ZH,High(Array4*2)  
             ldi      ZL,Low(Array4*2)
             rjmp     ReadArray
Pr5:
             
             ldi      ZH,High(Array5*2)  
             ldi      ZL,Low(Array5*2)
             rjmp     ReadArray
Pr6:
             
             ldi      ZH,High(Array6*2)  
             ldi      ZL,Low(Array6*2)
             rjmp     ReadArray
Pr7:
             
             ldi      ZH,High(Array7*2)  
             ldi      ZL,Low(Array7*2)
             rjmp     ReadArray
;---------------------------------------
ReadArray:
                          
             ldi      Temp,0            
             add      ZL,AdressMassive
             adc      ZH,Temp
             lpm                   
             mov      Massive,R0           
;---------------------------------------
             
             inc      AdressMassive
             cpi      AdressMassive,12          
             brne     init
             ldi      AdressMassive,0
                            







exitt:

;-------------INIT --------------;
INIT:
                     
             ldi      Schetchik,0
             ldi      temp,1          
             sts      status,temp      
             sts      status+1,temp   
             sts      status+2,temp      
             
            
            

;-------- --------;


;KANAL1
             mov      temp,Massive
             andi     temp,0b00000001
             cpi      temp,0b00000001
             breq     incr21
             cpi      r21,0
             breq     kanal22 
             dec      r21
             rjmp     kanal22
incr21: 
             lds      temp,Speed
             cpse     r21,temp
             inc      r21
               
KANAL22:
             mov      temp,Massive
             andi     temp,0b00000010
             cpi      temp,0b00000010
             breq     incr22
             cpi      r22,0
             breq     kanal23 
             dec      r22
             rjmp     kanal23
incr22: 
             lds      temp,Speed
             cpse     r22,temp
             inc      r22            

KANAL23:
             mov      temp,Massive
             andi     temp,0b00000100
             cpi      temp,0b00000100
             breq     incr23
             cpi      r23,0
             breq     Go_obrabotka 
             dec      r23
             rjmp     Go_obrabotka
incr23: 
             lds      temp,Speed
             cpse     r23,temp
             inc      r23
               

            

;--------------------------------;


Go_obrabotka:

;KANAL1
             
             lds      temp,status
             cpi      temp,0
             breq     kanal2
             sbr      OutP,0b00000001                 
             

             CPSE     Schetchik,r21
             rjmp     kanal2
             cbr      OutP,0b00000001
             ldi      temp,0
             sts      status,temp
  
KANAL2:
             
             lds      temp,status+1
             cpi      temp,0
             breq     kanal3
             sbr      OutP,0b00000010
             
             
             CPSE     Schetchik,r22
             rjmp     kanal3
             cbr      OutP,0b00000010
             ldi      temp,0
             sts      status+1,temp

KANAL3:
             
             lds      temp,status+2
             cpi      temp,0
             breq     outpo
             sbr      OutP,0b00000100
             
             
             CPSE     Schetchik,r23
             rjmp     outpo
             cbr      OutP,0b00000100
             ldi      temp,0
             sts      status+2,temp




;----------  ------------;

OutPo:
             cpi      r27,0
             breq     end1 

             Out      Portb,OutP
             rjmp     endf
end1:
             ldi      temp,0b00000000
	     out      portb,temp
endf:
reti


;----------------------------;

Array0:
.db   0b00000001,0b00000001
.db   0b00000011,0b00000011
.db   0b00000010,0b00000010
.db   0b00000110,0b00000110
.db   0b00000100,0b00000100
.db   0b00000101,0b00000101

Array1:
.db   0b00000001,0b00000000
.db   0b00000001,0b00000000
.db   0b00000001,0b00000000
.db   0b00000001,0b00000000
.db   0b00000001,0b00000000
.db   0b00000001,0b00000000
Array2:
.db   0b00000010,0b00000000
.db   0b00000010,0b00000000
.db   0b00000010,0b00000000
.db   0b00000010,0b00000000
.db   0b00000010,0b00000000
.db   0b00000010,0b00000000
Array3:
.db   0b00000100,0b00000000
.db   0b00000100,0b00000000
.db   0b00000100,0b00000000
.db   0b00000100,0b00000000
.db   0b00000100,0b00000000
.db   0b00000100,0b00000000

Array4:
.db   0b00000001,0b00000001
.db   0b00000001,0b00000001
.db   0b00000001,0b00000001
.db   0b00000001,0b00000001
.db   0b00000001,0b00000001
.db   0b00000001,0b00000001

Array5:
.db   0b00000010,0b00000010
.db   0b00000010,0b00000010
.db   0b00000010,0b00000010
.db   0b00000010,0b00000010
.db   0b00000010,0b00000010
.db   0b00000010,0b00000010
Array6:
.db   0b00000100,0b00000100
.db   0b00000100,0b00000100
.db   0b00000100,0b00000100
.db   0b00000100,0b00000100
.db   0b00000100,0b00000100
.db   0b00000100,0b00000100

Array7:
.db   0b00000000,0b00000000
.db   0b00000000,0b00000000
.db   0b00000000,0b00000000
